package com.itheima.reflect;

import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.lang.reflect.Field;

public class ObjectFrame {
//    把任意对象的字段名和其对应的值等信息， 保存到文件中去
    public static void saveObject(Object obj) throws Exception {

        PrintWriter ps=new PrintWriter(new FileOutputStream("D:\\AHeiMa\\javaBase\\src\\data.txt",true));
        // 获取的是obj的实际类型
        Class c=obj.getClass();

        //获取所有成员属性
        Field[] fields = c.getDeclaredFields();
        String cName = c.getSimpleName();   //获取对象的类型
        ps.println("---------------------------"+cName+"-------------------------"); // 打印类名

        //为什么反射中父类的对象可以用子类中的成员属性
        //父类引用存储子类对象时，可以通过反射获取子类的成员属性，这是反射的一大特性。
        //遍历每个成员变量
        for (Field field : fields) {
            //拿到成员变量的名字
            String name = field.getName();
            field.setAccessible(true);  //禁止检查权限，允许操作私有
            //获取当前成员变量的值，要传入一个对象
            String value=field.get(obj)+"";
            ps.println(name+"="+value); // 打印成员变量名
        }

        ps.close();
    }
}
